package com.mocai.merchant.core.domain;

import java.util.List;
import java.util.Map;

/**
 * 分页参数
 */
public interface Pageable {

    /**
     * 第几页
     *
     * @return
     */
    int getPageNumber();

    /**
     * 每页多少条记录
     *
     * @return
     */
    int getPageSize();

    /**
     * 分页起始位置
     *
     * @return
     */
    int getOffset();

    /**
     * 下一页参数
     *
     * @return
     */
    Pageable next();

    /**
     * 上一页参数
     *
     * @return
     */
    Pageable previous();

    /**
     * 下一页或者第一页参数
     *
     * @return
     */
    Pageable previousOrFirst();

    /**
     * 第一页参数
     *
     * @return
     */
    Pageable first();

    /**
     * 根据分页参数判断是否有上一页
     *
     * @return
     */
    boolean hasPrevious();

    /**
     * 根据返回结果判断是否有下一页
     *
     * @return
     */
    boolean hasNext();

    /**
     * 根据分页参数判断当前页是否是第一页
     *
     * @return
     */
    boolean isFirst();

    /**
     * 根据返回结果判断当前页是否是最后一页
     *
     * @return
     */
    boolean isLast();

    // 返回结果 ----------------------------------

    /**
     * 总记录数
     *
     * @return
     */
    long getTotalElements();

    /**
     * 总页数
     *
     * @return
     */
    int getTotalPages();

    /**
     * 当前页是否有数据
     *
     * @return
     */
    boolean hasContent();

    /**
     * 当前页数据
     *
     * @return
     */
    List<?> getContent();

    /**
     * 获取当前页记录数
     *
     * @return
     */
    int getSizeOfContent();

    void setTotalElements(long totalElements);

    void setContent(List<?> content);
}
